Skip to content

feat(steelbore-standard): §4.3 license-file naming + §5.6 bundle license carriage — v1.50 - #46

Merged
UnbreakableMJ merged 1 commit into
mainfrom
standard-skill-sync-v1.50
Aug 22, 2026
Merged

feat(steelbore-standard): §4.3 license-file naming + §5.6 bundle license carriage — v1.50#46
UnbreakableMJ merged 1 commit into
mainfrom
standard-skill-sync-v1.50

Conversation

@UnbreakableMJ

Copy link
Copy Markdown
Contributor

Skill-side sync of Standard#29 (merged as 6596880), landed at the same version and date per the two-repo rule in AGENTS.md.

This PR carries the rule text only. The migration that makes the repo obey it is separate — see Not in this PR below.

Synced from the Standard

§4.3 — License file naming

  • Canonical filename is LICENSE, no extension. LICENSE.md / LICENSE.txt are non-compliant.
  • COPYING MAY be added at project root as a symlink to LICENSE — never a second regular copy, never inside a distributable sub-unit (archivers dereference symlinks, shipping the text twice).
  • More than one license → one LICENSE.<TAG> per license (LICENSE.GPL, LICENSE.MIT), after GNU's COPYING.LESSER / COPYING.RUNTIME. Never concatenated; the SPDX expression, not the filename tag, is the version claim.

§5.6 — License carriage

A bundle is a distribution in its own right: consumers install the .zip/.skill without ever seeing this repository, so the repo-root LICENSE never reaches them and the copyleft obligation to supply the license with the work lands on the bundle.

  • Every skill directory carries a LICENSE; every bundle includes it.
  • Byte-identical to the repo root, machine-verified — enforced equality is what keeps the copies one maintained text rather than the two independent copies §4.3 forbids.
  • Regular file, never a link: ../LICENSE dangles the moment a directory is packaged alone, which is exactly what bundling and flake.nix's per-skill cp -r do.

Also

  • §14 checklist rows for §4.3 and §5.6 extended to match.
  • Masthead → v1.50 / 2026-08-22; frontmatter description version bumped.
  • Both bundles rebuilt in this commit.

Not in this PR — the repo does not yet satisfy this rule

Landing the rule before the migration is deliberate. Current state:

  • 34 of 44 bundles ship no license text at all
  • 10 skills carry LICENSE.md (markdown-converted GPL — a modified license document), in three non-identical variants
  • spacecraft-texinfo-document/LICENSE.md is a hand-written prose page containing no license text
  • microsoft-rust-guidelines uses LICENSE-GPL / LICENSE-MIT, to be renamed to the LICENSE.<TAG> form
  • construct-cli/src/commands/ship.rs:757 probes ["LICENSE", "LICENSE.md", "CREDITS.md"] — it drops LICENSE-GPL/LICENSE-MIT, the one skill with a legal need for both
  • AGENTS.md / CONTRIBUTING.md document the bundle recipe as zip … <name>/LICENSE, matching none of the files that actually exist

The migration PR gives all 44 skills a byte-identical LICENSE, repacks every bundle, teaches ship.rs and the docs the LICENSE + LICENSE.* literals, and adds the equality gate to CI.

Verification

Run against a clean git archive HEAD checkout, so gitignored local files can't mask a failure:

Gate Result
check-skill-refs.py --catalogue . . PASS (exit 0)
description cap over every SKILL.md PASS (exit 0)
reuse lint PASS (exit 0)
bundle drift sweep (content + missing-file) no DRIFT lines
.zip / .skill file lists identical
rendered description 988 chars — within the 1000 cap, 12 to spare
commit signature / timezone %G? = G, +0000

Prose parity with the merged Standard verified by probing all seven new normative phrases in both SKILL.md and The_Steelbore_Standard.md.

…nse carriage — v1.50

Skill-side sync of Standard PR #29 (Spacecraft-Software/Standard@6596880),
landed at the same version and date per the two-repo rule.

§4.3 gains a License file naming clause: the canonical filename is
LICENSE with no extension; LICENSE.md and LICENSE.txt are non-compliant.
COPYING MAY be added at project root as a symlink to LICENSE, never a
second regular copy and never inside a distributable sub-unit, since
archivers dereference symlinks and would ship the text twice. Where more
than one license applies each text gets its own LICENSE.<TAG> file after
GNU's COPYING.LESSER / COPYING.RUNTIME convention; texts are never
concatenated and the SPDX expression, not the filename tag, remains the
version claim.

§5.6 gains License carriage: a bundle is a distribution in its own
right, installed without the consumer ever seeing this repository, so
the copyleft obligation to supply the license with the work lands on the
bundle. Every skill directory carries a LICENSE, byte-identical to the
repo root and verified by an automated gate, and it MUST be a regular
file — a ../LICENSE symlink dangles the moment a directory is packaged
alone, which is what bundling and the flake's per-skill cp -r do.

§14 checklist rows for §4.3 and §5.6 extended to match. Masthead and
frontmatter description bumped to v1.50 / 2026-08-22; description
re-measured at 988 rendered characters, within the §5.6 cap (12 to
spare — the description is near the limit and any future addition must
trim elsewhere).

This PR is the rule text only. The repo does not yet satisfy it — 34 of
44 bundles ship no license text and ten skills carry LICENSE.md — and
the migration lands as its own PR.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmZmsWzmSaXpS7bFQu3fWJ
@UnbreakableMJ
UnbreakableMJ merged commit 85bb9c5 into main Aug 22, 2026
3 checks passed
@UnbreakableMJ
UnbreakableMJ deleted the standard-skill-sync-v1.50 branch August 22, 2026 09:51

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 73815f07a7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


| Rule | Detail |
|------|--------|
| `LICENSE` in every skill | Each skill directory MUST contain a `LICENSE` file named per §4.3, and every bundle built from that directory MUST include it. A bundle carrying no license text does not satisfy the distribution terms of any copyleft license the skill is under. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Define license carriage for vendored skill trees

For vendored Android skills, this unconditional source-directory requirement cannot be satisfied without violating the repository's upstream-preservation invariant: each android-skills/<name>/ leaf lacks a license, while mkSkillPackage publishes only that leaf and therefore omits the group-level android-skills/LICENSE.txt. Adding LICENSE to every leaf would make the vendored tree non-verbatim, so §5.6 needs a vendored-skill exception or a packaging-time license-injection rule before these per-skill packages can comply.

AGENTS.md reference: AGENTS.md:L244-L253

Useful? React with 👍 / 👎.

- [ ] **§5** Project Posture: README/NOTICE/CONTRIBUTING present; default personal-hobby stance applied; general-use carve-outs declared in project README
- [ ] **§5.5** Package distribution: `packaging/guix.scm`, `packaging/default.nix`, and `packaging/PKGBUILD` present, buildable, and carrying correct version + SHA-256 checksum (in each package manager's native format) before any release tag is pushed
- [ ] **§5.6** Skill packaging: every `SKILL.md` `description` measures ≤ 1000 rendered characters (folded scalars counted as the loader sees them, not as raw lines); the cap is enforced by CI *and* by the command that produces the bundle, not only by a local git hook — N/A for projects that ship no skills
- [ ] **§5.6** Skill packaging: every `SKILL.md` `description` measures ≤ 1000 rendered characters (folded scalars counted as the loader sees them, not as raw lines); the cap is enforced by CI *and* by the command that produces the bundle, not only by a local git hook; every skill directory carries a `LICENSE` (§4.3 naming, byte-identical to the repo root, a regular file) and every bundle ships it — N/A for projects that ship no skills

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exempt multi-licensed skills in the audit row

For the existing dual-licensed microsoft-rust-guidelines, this audit row requires a regular LICENSE byte-identical to the repository root, but the new multi-license rule in §5.6 requires LICENSE.<TAG> files in place of a single LICENSE. The migration therefore cannot pass the authoritative §14 audit while following §5.6; make this row explicitly accept and validate the multi-license form.

AGENTS.md reference: AGENTS.md:L47-L52

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant